<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>按要求组成数组</title>
  </head>
  <body>
    <script>
      let arrs = [2, 10, 3, 4, 5, 11, 10, 11, 20];
      function combine(arr) {
        //从小到大排序数组
        arr.sort((a, b) => {
          return a - b;
        });
        //数组去重
        arr = Array.of(...new Set(arr));
        console.log("生成的数组:" + arr);
        const result = []; //保存输出结果的数组
        let fast = 0; //当前元素
        while (fast < arr.length) {
          let begin = fast; //保存区间开始索引
          let prev = arr[begin]; //保存区间开始的值
          while (fast < arr.length && arr[fast + 1] - prev === 1) {
            //如果后面的值比前面的值大1则说明连续 继续检查后面的值
            fast++;
            prev = arr[fast];
          }
          if (fast - begin === 0) {
            //如果开始区间和结束区间的距离为0说明此处区域不连续(只有一个元素)  然后把这一个元素放入一个新数组中
            result.push([arr[fast]]);
          } else {
            //否则说明有连续的 就截取这个区间的元素
            result.push([arr.slice(begin, fast + 1)]);
          }
          fast++; //每次都检查新元素 不然会死循环
        }
        return result; //是一个二维数组
      }
      //随机生成10个数放到数组里
      const arr = [];
      for (let i = 0; i <= 11; i++) {
        arr[i] = (Math.random() * 20) | 0;
        // | 0 的意思是向下取整 也可以写Math.floor
      }
      console.log(combine(arrs));
    </script>
  </body>
</html>
